package com.cskaoyan.javase.array.operation6.traverse1;

/**
 * @description: 数组的遍历
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 依次输出数组中的每一个元素，就叫做数组的遍历，是数组最常见的操作
 * 养成习惯：写一点代码用一下快捷键 CTRL+alt+L
 *
 * 总结：写代码不是一蹴而就的，而是慢慢去改进，去迭代，去逐渐完善。
 * 和我们学习是一样的，学习也是不断积累，不断改进的过程，最终温故而知新，厚积薄发
 *
 * 数组的遍历操作是很常见的，如果我每次都写代码，太麻烦了
 * Java给我们提供了这种方法
 * Arrays.toString()
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        //比较浪费IDEA纸张的办法 土办法
       /* System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);*/
        //改进，for循环改进
        /*for (int i = 0; i < 3; i++) {
            System.out.println(arr[i]);
        }*/

        //如果数组很长，数长度很累人
        //traverse3(arr);

        //还是有需要完善的地方
        //我们写代码的程序员，要充分为用户考虑
        //用户会乱输入各种东西
        int[] arr2 = null;
        //traverse4(arr2);
        traverse5(arr2);


    }

    //抽取出for循环 作为一个方法
    public static void traverse(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    //改进版本，1，2，3
    public static void traverse2(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            //这个时候如果想最后一个元素没有逗号
            //需要用if判断，如果是最后一个元素，就不要加逗号
            if (i == arr.length - 1) {
                //这个下标是最后一个元素，不加逗号
                System.out.println(arr[i]);
            } else {
                //如果不是最后一个元素，加逗号
                System.out.print(arr[i] + ",");
            }
        }
    }

    //改进一下，用中括号把元素包裹起来 [代表数组 [1,2,3] 一眼看出来这个打印的是数组
    public static void traverse3(int[] arr) {
        //中括号在开头的位置，不要放在for里面了
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //这个时候如果想最后一个元素没有逗号
            //需要用if判断，如果是最后一个元素，就不要加逗号
            if (i == arr.length - 1) {
                //这个下标是最后一个元素，不加逗号
                System.out.println(arr[i] + "]");
            } else {
                //如果不是最后一个元素，加逗号
                System.out.print(arr[i] + ",");
            }
        }
    }

    //改进，考虑用户输入null，判断空
    public static void traverse4(int[] arr) {
        if (arr != null) {
            //用户输入的不是null数组
            //中括号在开头的位置，不要放在for里面了
            System.out.print("[");
            for (int i = 0; i < arr.length; i++) {
                //这个时候如果想最后一个元素没有逗号
                //需要用if判断，如果是最后一个元素，就不要加逗号
                if (i == arr.length - 1) {
                    //这个下标是最后一个元素，不加逗号
                    System.out.println(arr[i] + "]");
                } else {
                    //如果不是最后一个元素，加逗号
                    System.out.print(arr[i] + ",");
                }
            }
        }else {
            System.out.println("您输入的数据有误是一个null数组，请重新输入！");
        }
    }

    //改进，不使用这种if else 对代码可读性有影响
    //这里可以灵活使用跳转控制关键字
    public static void traverse5(int[] arr) {
        //判空
        if (arr == null){
            System.out.println("您输入的数据有误是一个null数组，请重新输入！");
            //break 循环 switch
            return; //立刻结束当前方法
        }
        //中括号在开头的位置，不要放在for里面了
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            //这个时候如果想最后一个元素没有逗号
            //需要用if判断，如果是最后一个元素，就不要加逗号
            if (i == arr.length - 1) {
                //这个下标是最后一个元素，不加逗号
                System.out.println(arr[i] + "]");
            } else {
                //如果不是最后一个元素，加逗号
                System.out.print(arr[i] + ",");
            }
        }
    }


}
